<?php namespace Common\Model;

use Hdphp\Model\Model;
/*
 * blog文章表****
 */
class Arc extends Model
{
	//指定数据库里的 表名
	protected $table = 'article';

	//自动验证字段不存在时验证失败
	protected $validate = array(
		array('title','required','标题不能为空',3,3),
		array('category_cid','required','分类必须要选择',3,3)

	);

	/*自动完成  $auto = [array(表单字段名,处理方法,方法类型,验证条件,处理时间)]
	 *自动完成是在模型层对数据进行自动处理的操作过程。
	 *必须执行 create 或 save 模型方法才有效
	 */
	protected $auto = array(
	  /*array(表单字段名,处理方法,方法类型,验证条件,处理时间)
	   * 处理时间 (可选)：
    	self::MODEL_INSERT      值:1    插入时处理
    	self::MODEL_UPDATE      值:2    更新时处理
    	self::MODEL_BOTH        值:3    全部情况时处理
	  */
	  	//sendtime发表时间字段,使用框架的time(),条件为必须处理,插入时处理
		array('sendtime','time','function',3,1),
		//updatetime更新时间,使用框架time(),条件为必须处理,全部情况处理
		array('updatetime','time','function',3,3),
		//user_uid用户id,使用自定义方法getUid,条件为必须处理,插入式处理
		array('user_uid','getUid','method',3,1),
		//缩略图
		array('thumb','getThumb','method',3,3)
	);
	
	
	//判断arctile文章表与arctile_data文章内容表 两张表 是否通过验证
	private function check(){
		//调用create方法,让$this->data 里有数据,并触发自动验证和自动完成
		if(!$this->create()) return FALSE;
		//判断如果$this->error有错误信息的话,那么就是上传失败了
		if($this->error) return FALSE;
		//验证article_data表
		$arcDataModel = new \Common\Model\ArcData;
		if(!$arcDataModel->create()){
			//把arcData模型的错误压入到当前模型,这样外面就可以获取到错误
			$this->error = $arcDataModel->getError();
			return FALSE;
		}
		return TRUE;
	}//check
	
	
	//添加数据
	public function store(){
		//**一\验证
		//$this->create -- [1.$this->data 2.自动验证 3.自动完成]
		//判断验证是否通过
		if(!$this->check()) return false;
		
		//**二\添加数据
		//1.添加article表数据
		$aid = $this->add(); //可以获得aid
		//2.添加article_data表
		$arcDataModel = new \Common\Model\ArcData;//实例化类
		$arcDataModel->create();//create,data才能有数据
		$arcDataModel->data['article_aid'] = $aid;
		$arcDataModel->add();
		//3.添加article_tag中间表
		$arcTagModel = new \Common\Model\ArcTag;
		$arcTagModel->store($aid);
		//成功,添加信息,返回true
		return TRUE;
	}//store


	//获得发表用户id
	public function getUid(){
	    return $_SESSION['info']['uid'];
	}//getUid


	//缩略图
	public function getThumb(){
		//接收编辑页面隐藏域的就图片的值
		$oldImg = Q('post.thumb');
		//判断是否上传,如果没有上传图片返回空字符串
		if($_FILES['thumb']['error'] == 4){
			//如果隐藏有就图片地址那么就是修改操作,直接return旧图片的地址信息
			if($oldImg){
				return $oldImg;
			}
			return '';
		}
		
		//获得上传文件信息
		$files = Upload::type('jpg,jpeg,png,gif')->make();
		//如果上传成功,返回上传地址给数据
		if($files){
			//如果用户在编辑和添加的时候有图片上传
				//如果存在旧图片的数据,说明是编辑操作,将旧图片删除
			if($oldImg){
				//1.删除缩略图
				unlink($oldImg);
				//2.1替换旧图片_thumb为空,组成图片路径信息
				$path = str_replace('_thumb', '', $oldImg);
				//2.2删除原图
				unlink($path);
			}
			//缩略图 样式Upload/31341470031983_thumb.png  ext:后缀名
			$thumbImg = str_replace(".{$files[0]['ext']}", "_thumb.{$files[0]['ext']}", $files[0]['path']);
			//缩略图图大小
			//Image::thumb(图片,  缩略图文件, 缩略宽度, 缩略高度, 缩略方式);
			$img = Image::thumb($files[0]['path'],$thumbImg,200,200,5);
			//返回上传地址给数据
			return $img;
		}//if-$files
		//如果上传失败
		//把上传错误压入到当前模型的错误属性,这样外面的控制器就可以用getError调取获取错误信息
		$this->error = Upload::getError();
	}//getThump

	
	//修改文章
	public function edit(){
		//一,先验证数据是否通过自动验证****
		if(!$this->check()) return FALSE;
		
		//二,修改的数据
		//1.article表
		$this->save();
		
		//2.article_tag 中间表
		$arcTagModel = new \Common\Model\ArcTag;
		//接收隐藏域的aid
		$aid = Q('post.aid',0,'intval');
		//先删除原数据
		$arcTagModel->where("article_aid={$aid}")->delete();
		//把数据添加进去
		$arcTagModel->store($aid);
		
		//3.article_data 内容表
		$arcDataModel = new \Common\Model\ArcData;
		//执行create
		$arcDataModel->create();
		//更新内容表里的数据
		$arcDataModel->where("article_aid={$aid}")->save();
		
		return TRUE;
	}//edit
	
}//class-Arc
?>